package chaoyue.study.basic;

/**
 * 方法重载
 * 因为java中存在自动类型转换和继承
 * 所以参数类型的重载是使用的最近最匹配原则
 * 这块可能写的时候可能会导致以为会走这个方法但实际上并没有走，所以要格外小心
 */
public class MethodOverload {
    public static void main(String[] args) {
        test(10);// test-int
        test('C');// test-int char可以转换成int
        test(Integer.valueOf(10));// test-Integer
        byte b = 3;
        test(b);// test-short 因为short比int更匹配byte
        test(Long.valueOf(3));// test-long 没有找到包装类型匹配的，可以自动拆箱使用基础类型匹配的
        test(new Base());// test-base 可以完全匹配
        test(new Child1());// test-child 可以完全匹配
        test(new Child2());// test-base 子类无法完全匹配，但是有父类的方法，向上转型成父类进行调用

    }

    private static void test(int i) {
        System.out.println("test-int");
    }

    private static void test(Integer i) {
        System.out.println("test-Integer");
    }

    private static void test(short i) {
        System.out.println("test-short");
    }

    private static void test(long i) {
        System.out.println("test-long");
    }

    private static void test(Base b) {
        System.out.println("test-base");
    }

    private static void test(Child1 s) {
        System.out.println("test-child");
    }

    private static class Base {

    }

    private static class Child1 extends Base {
    }

    private static class Child2 extends Base {

    }
}
